package com.cc.Factory;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author cc
 * @date 2021/8/10 17:20
 * @Description
 */

public class BeanFactory {
    static HashMap<String,Object> map  =new HashMap<String, Object>();
    static {
        //new配置文件
        Properties properties = new Properties();
        //获取配置文件下的路径
        try {
            properties.load(BeanFactory.class.getClassLoader().getResourceAsStream("Beanfactory.properties"));
            //读取配置文件下的内容
            String beanServicepath = properties.getProperty("BeanService");
            String beandaopath = properties.getProperty("Beandao");

//            //注意这里不能先写BeanService 原因：service里面包含了 dao层的对象，在初始化service时，会发现dao层并没有，导致程序报空错误
//            Object BeanService = Class.forName(beanService).newInstance();

            //正确写法
            Object beandao = Class.forName(beandaopath).newInstance();
            map.put("Beandao",beandao);
            Object beanservice = Class.forName(beanServicepath).newInstance();
            map.put("BeanService",beanservice);

            //自动加载类，把类作为属性
            Field[] serviceparasms = beanservice.getClass().getDeclaredFields();
            if (serviceparasms!=null){
                for (Field serviceparasm : serviceparasms) {
                    //暴力反射
                    serviceparasm.setAccessible(true);
                    //注入方法 第一个是类名，第二个是属性 如private String name这种属性
                    serviceparasm.set(beanservice,beandao);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Object getBeanFactory(String beanname){
        if (map.containsKey(beanname)){
            return map.get(beanname);
        }
        return null;
    }
}
